#!/usr/bin/env sh

DEBUG=0

binary_table="'000000' '000001' '000010' '000011' '000100' '000101' '000110' '000111' \
              '001000' '001001' '001010' '001011' '001100' '001101' '001110' '001111' \
              '010000' '010001' '010010' '010011' '010100' '010101' '010110' '010111' \
              '011000' '011001' '011010' '011011' '011100' '011101' '011110' '011111' \
              '100000' '100001' '100010' '100011' '100100' '100101' '100110' '100111' \
              '101000' '101001' '101010' '101011' '101100' '101101' '101110' '101111' \
              '110000' '110001' '110010' '110011' '110100' '110101' '110110' '110111' \
              '111000' '111001' '111010' '111011' '111100' '111101' '111110' '111111'"
i=0
for x in $binary_table; do
    eval binary_table$i=$x
    i=$((i+1))
done

# A neat feature of shell arrays is that they are sparse, and we leverage that here.
# This builds a mapping between the ASCII code of the base64 string characters and
# the corresponding offset in the binary_table above.
for x in $(seq 0 25); do
  # A-Z
  #ascii_map[65+$x]=$x
  index=$((x+65))
  eval ascii_map$index=$x
  # a-z
  index=$((x+97))
  eval ascii_map$index=$(($x+26))
  if [ $x -lt 10 ]; then
    # 0-9
    index=$((x+48))
    eval ascii_map$index=$(($x+52))
  fi
done
# +
ascii_map43=62
# /
ascii_map47=63

input_file=$1
# The string passed will be a binary representation of at most 3 bytes.
print_binary() {
  bytes=$1
  [ $DEBUG -eq 1 ] && echo "   bytes= "$bytes
  # pad out to the nearest byte
  while [ $((${#bytes} % 8)) -gt 0 ]; do
    bytes="${bytes}0"
  done
  num_bytes=$((${#bytes} / 8))
  # split string into 8-bit substrings
  counter=0
  while [ ${#bytes} -gt 0 ]; do    
    next=${bytes#?}
    letter=${bytes%"$next"}
    bytes=$next
  
    # parse binary string into an integer representation
    bit_counter=$((counter % 8 ))
    [ $bit_counter -eq 0 ] && byte=0
    if [ $bit_counter -lt 8 ]; then
      to_shift=$((7 - $bit_counter))
      bit=$(($letter << $to_shift))
      byte=$(($byte + $bit))
      counter=$((counter+1))
    fi
    if [ $bit_counter -eq 7 ]; then
      # once we have the byte decoded, print it to stdout
      #printf "\x$(printf '%02x' $byte)"
      byte1=$(printf '%o' $byte)
      #echo $byte1
      # Convert to pure binary
      printf '%b' \\"$byte1"
    fi 
  done
}

if [ -z "$input_file" ]; then
  echo "usage: $(basename $0) [base64_file]"
  exit 1
fi

if [ ! -r "$input_file" ]; then
  echo "error: $input_file is not readable."
  exit 2
fi

count=0
binary_string=''
# BUG: The input file must contain at least one newline or else this no-ops
# BUG: This will produce faulty output if the lines on the inputfile are not a multiple of 4 in length
# read each line
tail -n +150 "$input_file" | while read -r word; do
  [ $DEBUG -eq 1 ] && echo "word= "$word 
  while [ ${#word} -gt 0 ]; do    
    # get the base64-encoded letter
    next=${word#?}
    letter=${word%"$next"}
    word=$next
    [ $DEBUG -eq 1 ] && echo "  letter= "$letter
    # turn it into an ASCII code
    ascii_code=$(printf '%d' "'${letter}")
    [ $DEBUG -eq 1 ] && echo "ascii_code = "$ascii_code
    # look up in our table to see the binary snippet that corresponds with it
    binary_table_idx=$(eval echo '$'ascii_map$ascii_code)
    [ $DEBUG -eq 1 ] && echo "binary_table_idx = "$binary_table_idx

    # if the file has an invalid base64 character we just skip it
    if [ -n "$binary_table_idx" ]; then
      binary_string="${binary_string}$(eval echo '$'binary_table$binary_table_idx)"
      count=$(($count + 1))
      if [ $((count % 4)) -eq 0 ]; then
        [ $DEBUG -eq 1 ] && echo
        print_binary $binary_string
        binary_string=''
      fi
    fi
    [ $DEBUG -eq 1 ] &&  echo "loop word= "$word
  done
done 
# Since '=' is ignored in the above loop, we need to handle the case where there's
# trailing padding. 
if [ -n "$binary_string" ]; then
  print_binary $binary_string
fi

exit 0



















# make sure ==START== is on line 149
#==START==
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
